在 Kubernetes 學習的過程中,我曾經對 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)的設計產生過一個疑問:
為什麼需要先有 PV,再去建立 PVC,最後才綁定?為什麼不能在部署 Pod 的時候,直接指定一個 Volume 就好?
這個問題看似簡單,但其實牽涉到 Kubernetes 背後對「資源管理」與「責任分工」的設計哲學。本文就從這個疑問出發,逐步整理我對 PV/PVC 的理解,並分享一些實務上的觀察。
如果我們能在 Pod 裡面直接宣告一個 Volume,聽起來簡單明瞭。但實際上會遇到幾個問題:
Pod 是短暫的(ephemeral)
責任分工問題
資源分配與管理
PersistentVolume (PV)
PersistentVolumeClaim (PVC)
綁定過程
Reclaim Policy
這就像是飯店管理:
如果沒有這一層流程,每個客人都要自己蓋房子(直接在 Pod 定義 Volume),那麼:
在真實環境中,管理員通常不會一個一個手動建立 PV,而是定義 StorageClass,讓系統自動處理:
範例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
開發者只需要在 PVC 裡面指定:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: fast-ssd
這樣就會自動產生一個 EBS Volume 當作 PV,並且綁定到 PVC。
透過這次的學習,我理解了為什麼 Kubernetes 不允許在 Pod 裡直接創建持久化 Volume,而是引入了 PV/PVC 的抽象:
這種設計看似「複雜」,但其實是為了在多租戶、共享資源的叢集環境下,提供更高的彈性與可管理性。
📖 參考資料: